perm filename HOT[NS,SYS] blob sn#117846 filedate 1974-09-04 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	HOT
C00009 ENDMK
C⊗;
;HOT

	TITLE	HOT line to the AP news

IFNDEF DEBUG, <DEBUG←←0>


F←0
A←1
B←2
C←3
D←4
E←5

L←6
M←7
N←10

Q←11
R←12

W←13
X←14
Y←15
Z←16

P←17

IFN DEBUG, <
FILER:	BLOCK	2000
>

DEFINE EACH {FOR @! N ε {01}}	;LIST OF WIRE NUMBERS

CODE:	0			;FILER SHOULD HAVE 'HOT' IN THIS WORD

SBUF:	EACH {
SBUF!N:	BLOCK LSPCL}

SPOINT:	EACH {
SPTR!N:	0}

LJOBRD←←.-CODE

;PTRS TO FRONT OF EACH WIRE'S BUFFER
FRONT:	EACH {
	SBUF!N}

JBRDBK:	SIXBIT /[-NS-]/		;NAME OF JOB WE WANT TO JOBRD
	-LJOBRD,,140		;NEGATIVE WORD COUNT,,HIS ADDRESS
	CODE			;MY ADDRESS

TTMS:	SIXBIT	/TTY/		;TTYMES HEADER
	0

LUZ:	ASCIZ/...
(text lost by HOT)...
/

NAME:	[ASCIZ /New York Times News Service/]
	[ASCIZ /Associated Press/]

LPDL←←10
PDL:	BLOCK	LPDL

INTRPT:	UWAIT			;MAKE SURE SLEEP ENDS NOW
	SETOM	INTFLG#
	DISMIS

IFN DEBUG, <
	JRST	REDALL		;START AT SA-1 TO READ IN ALL OF FILER'S CORE IMAGE
>
HOT:	RESET
	MOVEI	Z,1		;CODE OF CURRENT WIRE SERVICE--DEFAULT IS AP
	MOVEI	A,REE
	MOVEM	A,JOBREN↑
	MOVEI	A,INTRPT
	MOVEM	A,JOBAPR↑
	MOVSI	A,20000		;INTERRUPT ON TTY INPUT
	INTENB	A,
	MOVEI	A,CODE
	MOVEM	A,JBRDBK+2	;ADDRESS WHERE JOBRD PUTS DATA
IFN DEBUG,<
	SETZM	DELTA#
>
	SETZM	ALLOK
	RESCAN	CCOUNT#		;RESCAN MONITOR COMMAND
	MOVE	E,CCOUNT
HOT1:	INCHSL	C		;GET NEXT CHAR IF ANY
	JRST	REE		;NONE
	CAIE	C,";"
	SOJG	E,HOT1
	JUMPG	E,TTYIN		;JUMP IF FOUND SEMICOLON

REE:	MOVE	P,[IOWD LPDL,PDL]
	SETZM	INTFLG#
	SETO	A,
	CALLI	A,400066
	TLZ	A,777776
	HLLZM	A,ALLOK#
	TLNN	A,1
	MOVEI	Z,0
	MOVE	A,[-LJOBRD,,140]
	MOVEM	A,JBRDBK+1	;IN CASE ERROR CODE OVERWROTE THIS WORD

REE1:	MOVEI	A,JBRDBK
	JOBRD	A,
	JRST	NOREAD
	MOVE	B,SPOINT(Z)	;BYTE POINTER TO CURRENT PLACE IN BUFFER
	ADDI	B,2		;MAKE INTO PTR TO OLDEST TEXT IN BUFFER
	OUTSTR	[ASCIZ/		.../]
	OUTSTR	@NAME(Z)
	OUTSTR	[ASCIZ/...

/]
	JRST	MAIN0		;TYPE OUT INITIAL CONTENTS OF BUFFER

MAIN:	MOVEI	A,JBRDBK
	JOBRD	A,
	JRST	NOREAD
	
MAIN0:	MOVE	E,CODE
	CAIE	E,'HOT'		;DOES FILER HAVE RIGHT CODE?
IFN DEBUG, <
	JRST	SEARCH
>
IFE DEBUG, <
	JRST	[MOVEI A,3	;NO, TELL HIM HOT LINE IS DOWN
		JRST NOREA1]
>
	MOVE	E,SPOINT(Z)	;PTR TO LAST BYTE OF DATA IN BUFFER
	CAMN	E,B		;HAS MORE DATA APPEARED?
	JRST	DOWAIT		;NO

;HERE IS A KLUDGE TO AVOID MISSING SINGLE CHARACTERS IN THE BUFFER NOW AND THEN
	MOVE	D,E
	ADDI	D,CODE-140
IFN DEBUG,<
	SUB	D,DELTA
>
	LDB	C,D
	JUMPN	C,.+2		;ZERO MEANS THE IBP HAS BEEN DONE, BUT NOT THE DPB
	ADD	E,[070000,,0]	; SO BACK UP THE BYTE POINTER TO LAST REAL CHAR
	
	MOVEI	C,(B)		;SAVE ADDRESS OF OLD PLACE
	ADDI	B,CODE-140	;MAKE INTO BYTE POINTER IN OUR CORE IMAGE
IFN DEBUG,<
	SUB	B,DELTA
>
	TLZ	B,7777		;CLEAR COUNT FIELD FOR TTYMES PTR
	MOVEM	B,TTMS+1	;STORE TTYMES PTR
	MOVEI	A,TTMS
	SKIPE	INTFLG
	JRST	TTYIN
	TTYMES	A,		;TYPE OUT REMAINDER OF BUFFER
	JFCL
	CAILE	C,(E)		;HAS PTR WRAPPED AROUND THIS TIME?
	OUTSTR	@FRONT(Z)	;YES, TYPE OUT FRONT PART OF BUFFER

	MOVEI	A,5		;WAIT 5 SECS IF GOT SOME TEXT THIS TIME
	SKIPA	B,E
DOWAIT:	MOVEI	A,=10		;WAIT 10 SECS IF GOT NO TEXT THIS TIME
	SKIPN	INTFLG
	SLEEP	A,
	SKIPN	INTFLG
	JRST	MAIN

TTYIN:	SETZM	INTFLG
	INCHSL	A
	JRST	MAIN
	CLRBFI
	OUTSTR	[ASCIZ/


/]
	TRZ	A,40
	CAIN	A,"A"
	TDZA	Z,Z		;AP
	CAIE	A,"N"
	TRCA	Z,1		;NEXT WIRE
	TDZ	Z,Z		;NYT
	JRST	REE

NOREAD:	HRRZ	A,JBRDBK+1	;GET JOBRD ERROR CODE
NOREA1:	OUTSTR	[ASCIZ /

Sorry -- cannot run hot line now.
/]
	CAIGE	A,ERRMAX
	OUTSTR	@ERROR(A)
	EXIT

ERROR:	[0]			;NO SUCH ERROR CODE
	[0]			;NON EXISTENT JOB NUMBER (JOB NUMBER 0)
	[ASCIZ /Confusion reigns with the news phantoms./];ambiguous job name
	[ASCIZ /Hot line is down./]	;NO SUCH JOB NAME
	[0]
	,@.-2
ERRMAX←←.-ERROR

IFN DEBUG,<

SEARCH:	MOVE	A,[-2000,,0]
	MOVEM	A,JBRDBK+1
	MOVEI	A,FILER
	MOVEM	A,JBRDBK+2
	MOVEI	B,'HOT'
	OUTSTR	[ASCIZ/SEARCHING.../]
SEARC0:	MOVEI	A,JBRDBK
	JOBRD	A,
	JRST	NOREAD
	MOVE	A,[-2000,,FILER]
	CAME	B,(A)
	AOBJN	A,.-1
	JUMPL	A,FOUND
	MOVEI	A,2000
	ADDM	A,JBRDBK+1
	JRST	SEARC0

FOUND:	HRRZ	B,JBRDBK+1	;ADDRESS IN FILER
	ADDI	B,-FILER(A)	;LOCATION WITHIN 1K
	HRRM	B,JBRDBK+1
	SUBI	B,140
	MOVEM	B,DELTA#
	MOVEI	B,-LJOBRD
	HRLM	B,JBRDBK+1	;NEGATIVE JOBRD WORD COUNT
	MOVEI	B,CODE
	MOVEM	B,JBRDBK+2
	OUTSTR	[ASCIZ/
/]
	JRST	REE1

REDALL:	MOVSI	A,-2000
	MOVEM	A,JBRDBK+1
	MOVEI	A,FILER
	MOVEM	A,JBRDBK+2
	MOVEI	A,JBRDBK
	JOBRD	A,
	JRST	NOREAD
	JRST	@JOBDDT↑
>;END DEBUG

UUCODE:	HALT	.

	END	HOT